#include <stdio.h>
#include <stdlib.h>

// 内存管理
void memory(void)
{
    // malloc函数向堆区申请一段内存空间
    // 向堆区申请  5个int类型的字节空间  一共是20个字节
    int *arr = NULL; // 空指针
    arr = (int *)malloc(sizeof(int) * 5);
    // 现在相当于arr指向了刚才分配的20个字节的空间的首地址  所以 可以将arr当作数组名使用
    printf("请输入5个整数：");
    for (int i = 0; i < 5; i++)
    {
        scanf("%d", arr + i);
    }
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("sizeof(arr):%lu\n", sizeof(arr)); // 8个字节
    // realloc  给刚才分配的空间扩容  但是 这个字节大小并不是扩容空间 而是总空间字节大小
    arr = realloc(arr, sizeof(int) * 7);
    arr[5] = arr[6] = 100;
    for (int i = 0; i < 7; i++)
    {
        printf("%d ", arr[i]);
    }
    // 一定要记得释放
    free(arr);

    // calloc
    arr = calloc(5, sizeof(int));
    printf("请输入5个整数：");
    for (int i = 0; i < 5; i++)
    {
        scanf("%d", arr + i);
    }
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    free(arr);
}

void main()
{
    memory();
}